//配置路由的地方
import Vue from "vue";
import VueRouter from "vue-router";
import routes from "./routes"

// 引入store
import store from '@/store'
//使用插件
Vue.use(VueRouter)
//引入路由组件

//先把VueRouter原型对象的push保存一份
let originPush = VueRouter.prototype.push
let originReplace = VueRouter.prototype.replace

//重写push和replace
//第一个参数，告诉原来的push方法往哪里跳转（传递哪些参数）
//第二个参数：成功的回调
//第三个参数：失败的回调
//call和apply的区别
//相同点：都可以调用函数一次，都可以篡改函数的上下文一次
//不同点：call和apply传递参数：call传递参数用逗号隔开，apply用数组传参
VueRouter.prototype.push = function (location, reslove, reject) {
    if (reslove && reject) {
        originPush.call(this, location, reslove, reject)
    } else {
        originPush.call(this, location, () => { }, () => { })
    }
}
VueRouter.prototype.replace = function (location, reslove, reject) {
    if (reslove && reject) {
        originReplace.call(this, location, reslove, reject)
    } else {
        originReplace.call(this, location, () => { }, () => { })
    }
}

//配置路由
let router = new VueRouter({
    //配置路由
    routes,
    // 滚动行为
    scrollBehavior(to, from, savedPosition) {
        // 返回y=0，代表滚动条在最上方
        return { y: 0 }
    }
})

// 全局守卫：前置守卫
/* router.beforeEach(async (to, from, next) => {
    // to:跳转到那个的路由信息
    // from:获取到从哪个路由而来的信息
    // next:放行函数
    // 获取仓库中的token，用来获取用户是否登录
    let token = store.state.user.token
    let name = store.state.user.userInfo.name
    if (token) {
        // 用户已经登录 路由不能再跳转到login
        if (to.path == '/login') {
            next('/home')
        } else {
            // 用户已登录，但是去的地方不是login
            if (name) {
                // 已经有用户名
                next()
            } else {
                // 没有用户名，派发action，仓库存储用户信息后进行路由跳转
                // 获取用户信息，在首页展示
                try {
                    await store.dispatch("getUserInfo");
                    // 获取用户信息成功后进行路由跳转
                    next()
                } catch (error) {
                    // 获取不到用户信息，即token失效，需要用户重新登录
                    // 清除本地存储中的token
                    await store.dispatch('userLogout')
                    next('/login')
                }
            }
            next()
        }
    } else {
        // 用户未登录
        let toPath = to.path
        // if (toPath.indexOf('/trade') != -1 || toPath.indexOf('/pay') != -1 || toPath.indexOf('/center') != -1) {
        //     // 把未登录时想去的地方储存与地址栏中（作为query参数储存于登录的路由中）
        //     next('/login?redirect=' + toPath);
        // } else {
        //     next()
        // }
    }
}) */

export default router